// 自定义一个 404错误类型
class NotFoundError extends Error {
  constructor(message) {
    super(message);
    this.name = "NotFoundError";
  }
}

// 公共方法 : 查询数据
async function getArticle(req) {
  const { id } = req.params;
  // 通过主键搜素出数据
  const passage = await Article.findByPk(id);

  // 如果没找到的话就抛出异常
  if (!passage) {
    throw new NotFoundError("ID:${id}的文章未找到!");
  }

  // 如果找到了就返回找到的数据
  return passage;
}

// 公共返回成功信息
function success(res, message, data = {}, code = 200) {
  res.status(code).json({
    status: true,
    message,
    data,
  });
}

// 公共返回失败信息
function failure(res, error) {
  // 获取error里面的 SequelizeValidationError
  if (error.name === "SequelizeValidationError") {
    // 对error里面的message进行遍历 取出里面的message
    const errors = error.errors.map((e) => e.message);

    // 返回 400 -- 请求格式错误 的错误信息
    res.status(400).json({
      status: 0,
      message: "参数错误!",
      errors,
    });
  } else if (error.name === "NotFoundError") {
    //   如果是404错误 -- 没找到结果
    res.status(404).json({
      status: 0,
      message: "数据不存在!",
      errors,
    });
  } else {
    res.status(500).json({
      status: 0,
      message: "服务器错误!",
      errors: [error.message],
    });
  }
}

// 默认导出
module.exports = {
  NotFoundError,
  getArticle,
  success,
  failure,
};
